package com.foreknow.demo14;

/**
 * 主人类
 *
 * 基本数据类型的转换：
 * 1.自动类型转换  大类型 = 小类型    double d = 12;
 * 2.强制类型转换  小类型 = (小类型)大类型  double d = 3.14;   int a = (int)d;
 *
 * 引用类型的转换（要有继承关系）
 * 1.向上造型：大类型 = 小类型   Pet p = new Cat();
 * 2.向下造型：小类型 = (小类型)大类型   Penguin penguin = (Penguin)p;
 *
 * 注意：如果子类对父类新扩充了一些方法，使用父类型是访问不到这些新扩充的方法的。
 * 解决的办法：将父类型强制转换为子类型，就可以访问到子类中新扩充的方法了。
 *
 * 为什么要使用多态？有什么好处？
 * 继承多态可以优化程序设计，可以提高可重用性，让程序更加灵活。但是多态不会提高程序的效率。
 */
public class Master {
    //要使用多态来优化设计
    public void cure(Pet pet) { //这个参数有可能是dog,也有可能是penguin  pet它指向的就是Dog对象  父类的引用指向子类的对象了。
        if(pet.getHealth()<50) {
            pet.toHospital();
        }
    }

    public void play(Pet pet) {
        if(pet instanceof Dog){ //是否有继承关系 如果有就返回true 否则就返回false
            Dog dog = (Dog) pet;
            dog.catchingFlyDisc();
        }else if(pet instanceof  Penguin){
            Penguin penguin = (Penguin) pet;
            penguin.swimming();
        }

    }



//  public void cure(Dog dog) {
//    if (dog.getHealth() < 50) {
//      dog.setHealth(60);
//      System.out.println("吃药，打针......");
//    }
//  }
//
//  public void cure(Penguin penguin) {
//    if (penguin.getHealth() < 50) {
//      penguin.setHealth(70);
//      System.out.println("吃药，医疗");
//    }
//  }
}